FROM alpine:3.19.1

LABEL maintainer="monkey"
ENV NGINX_SOURCE_NAME nginx-1.25.5

#source file
COPY nginx-1.25.5.tar.gz /
COPY /modules /modules

# 安装的扩展xxx.so文件会被复制到modules-path参数的路径中
ENV CONFIG "\
        --prefix=/etc/nginx \
        --sbin-path=/usr/sbin/nginx \
        --modules-path=/usr/lib/nginx/modules \
        --conf-path=/etc/nginx/nginx.conf \
        --error-log-path=/var/log/nginx/error.log \
        --http-log-path=/var/log/nginx/access.log \
        --pid-path=/var/run/nginx.pid \
        --lock-path=/var/run/nginx.lock \
        --http-client-body-temp-path=/var/cache/nginx/client_temp \
        --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
        --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
        --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
        --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
        --user=nginx \
        --group=nginx \
		--with-compat \
		--with-file-aio \
		--with-threads \
		--with-http_addition_module \
		--with-http_auth_request_module \
		--with-http_dav_module \
		--with-http_flv_module \
		--with-http_gunzip_module \
		--with-http_gzip_static_module \
		--with-http_mp4_module \
		--with-http_random_index_module \
		--with-http_realip_module \
		--with-http_secure_link_module \
		--with-http_slice_module \
		--with-http_ssl_module \
		--with-http_stub_status_module \
		--with-http_sub_module \
		--with-http_v2_module \
		--with-mail \
		--with-mail_ssl_module \
		--with-stream \
		--with-stream_realip_module \
		--with-stream_ssl_module \
		--with-stream_ssl_preread_module \
        --add-dynamic-module=modules/headers-more-nginx-module-0.37 \
        "

RUN set -x \
    && addgroup -S nginx \
	&& adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx \
	&& adduser -u 82 -D -S -G www-data www-data \
    \
	&& mkdir -p /usr/src \
	&& tar -zxC /usr/src -f ${NGINX_SOURCE_NAME}.tar.gz \
	&& rm ${NGINX_SOURCE_NAME}.tar.gz \
	&& cd /usr/src/${NGINX_SOURCE_NAME} \
    && mv /modules /usr/src/${NGINX_SOURCE_NAME}/modules \
	\
	&& sed -i "s@dl-cdn.alpinelinux.org@mirrors.aliyun.com@g" /etc/apk/repositories \
	&& apk add --no-cache --virtual .build-deps \
			gcc \
			libc-dev \
			make \
			openssl-dev \
			pcre-dev \
			zlib-dev \
			linux-headers \
			curl \
			libxslt-dev \
			gd-dev \
			geoip-dev \
    \
	# compile nginx and extend modules
	&& ./configure ${CONFIG} \
	&& make -j$(getconf _NPROCESSORS_ONLN) \
    && make install \
	\
	# init nginx file
	&& rm -rf /etc/nginx/html/ \
	&& mkdir /etc/nginx/conf.d/ \
	&& mkdir -p /usr/share/nginx/html/ \
	&& install -m644 html/index.html /usr/share/nginx/html/ \
	&& install -m644 html/50x.html /usr/share/nginx/html/ \
    # xxx.so linkto /etc/nginx
	&& ln -s ../../usr/lib/nginx/modules /etc/nginx/modules \
    # reduce nginx image size
	&& strip /usr/sbin/nginx* \
	&& strip /usr/lib/nginx/modules/*.so \
	&& rm -rf /usr/src/${NGINX_SOURCE_NAME} \
	\
	# Bring in gettext so we can get `envsubst`, then throw
	# the rest away. To do this, we need to install `gettext`
	# then move `envsubst` out of the way so `gettext` can
	# be deleted completely, then move `envsubst` back.
	&& apk add --no-cache --virtual .gettext gettext \
	&& mv /usr/bin/envsubst /tmp/ \
	\
	&& runDeps="$( \
			scanelf --needed --nobanner --format '%n#p' /usr/sbin/nginx /usr/lib/nginx/modules/*.so /tmp/envsubst \
					| tr ',' '\n' \
					| sort -u \
					| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
	)" \
	&& apk add --no-cache --virtual .nginx-rundeps $runDeps \
	&& apk del .build-deps \
	&& apk del .gettext \
	&& mv /tmp/envsubst /usr/local/bin/ \
	\
	# Bring in tzdata so users could set the timezones through the environment
	# variables
	&& apk add --no-cache tzdata \
	# Bring in curl and ca-certificates to make registering on DNS SD easier
	&& apk add --no-cache curl ca-certificates \
	# forward request and error logs to docker log collector
	&& ln -sf /dev/stdout /var/log/nginx/access.log \
	&& ln -sf /dev/stderr /var/log/nginx/error.log
	
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80 443

# setup stop signal
STOPSIGNAL SIGTERM

CMD ["nginx", "-g", "daemon off;"]